'use strict';

class AppBootHook {
    constructor(app) {
        this.app = app;
    }

    configWillLoad() {
        // 此时 config 文件已经被读取并合并，但是还并未生效
        // 这是应用层修改配置的最后时机
        // 注意：此函数只支持同步调用
    }

    async didLoad() {
        // 所有的配置已经加载完毕
        // 可以用来加载应用自定义的文件，启动自定义的服务
    }

    async willReady() {
        // 所有的插件都已启动完毕，但是应用整体还未 ready
        // 可以做一些数据初始化等操作，这些操作成功才会启动应用

        //存储对应的CryptoObj对象数据，方便查找对应的对象用于解密数据
        this.app.listCryptoObj = [];
        //存储忘记密码校验id，防止没有先获取短信验证码，直接调用修改密码接口
        this.app.listForgetPwdCheckId = [];
    }

    async didReady() {
        // 应用已经启动完毕
        // const ctx = await this.app.createAnonymousContext();

    }
    /**
     * 异步延迟做测试
     * @param {number} time 延迟的时间,单位毫秒
     */
    sleep(time = 0) {
        return new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve();
            }, time);
        })
    };

    async serverDidReady() {
        // http / https server 已启动，开始接受外部请求
        // 此时可以从 app.server 拿到 server 的实例
        //应用启动完成
    }

    async beforeClose() {
        // 应用即将关闭

        //释放Sqlite资源
        // await ctx.service.sqliteHelper.close();

    }
}

module.exports = AppBootHook;
